package com.thread.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author xuejingjing
 * @className Demo
 * @description TODO
 * @date 2022/11/12/012 17:27
 */
public class Demo {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("张1", "王1", "李1", "张2", "张3", "钱1", "赵1", "毛1");
        // 体验流,
        // public interface Predicate<T> 这个接口的实现类
        /**
         * 理解: filter后面需要传一个接口Predicate<T>,这个接口只有一个抽象方法 boolean test(T t);
         * 所以可以用lambal表达式去实现，即下文。T 代表的是e,e代表的是String
         */
        // TODO: 2022/11/12/012  这是获取一个流对象，B站
        Stream<String> stream = list.stream();
        // 一个参数，可以不写类型和括号。->是自己实现的内容
        // customer接口，void accept(T t);
        list.stream().filter(e -> e.startsWith("张")).forEach(e -> System.out.print(e));
        //将结果放到数组
        Object[] obj = list.stream().filter(e -> e.startsWith("张")).toArray();
        // 将结果转换为list集合
        List<String> name = list.stream().filter(e -> e.startsWith("张")).collect(Collectors.toList());
//        System.out.println(list));
        // 这个例子说明流不会改变原数据源
        System.out.println(list);
    }
}
